/**
 * 工作流JS类
 * @param  {[type]} ){                 var var1 [description]
 * @return {[type]}     [description]
 */
var VFlow = (function(){
    /**
     * 工具栏类型
     * @type {String}
     */
    var TOOLTYPE_FLOW="0";//流程类型
    var TOOLTYPE_START="1";//开始节点
    var TOOLTYPE_FORMTASK="3";//人工任务
    var TOOLTYPE_TOOLTASK="4";//自动任务
    var TOOLTYPE_SYNCHRONIZER="6";//同步器
    var TOOLTYPE_LINE="5";//连接线
    var TOOLTYPE_END="7";//结束节点
    //当前激活的工具栏
    var active_toolbar="";
    //工具栏class样式
    var toolbar_class="";
    //连接线的两个元素
    var lineNodes=[];

    var canvas,stage,scene;

    var current_active_node;//当前选中的节点
    /**
     * 画布初始化
     * @return {[type]} [description]
     */
    var initCanvas=function(canvasClass){
        //创建画布
        canvas = document.getElementById('canvas');
        stage = new JTopo.Stage(canvas);
        stage.mode="edit";
        scene = new JTopo.Scene(stage);
        var sceneId ="WorkFlow"+ formatDateTime(new Date());//场景id
        scene.id=sceneId;
        scene.name=sceneId;
        scene.displayName=sceneId;
        //显示属性列表
        $("#flow_pro_name").text(scene.name);
        $("#flow_pro_displayName").val(scene.displayName);
        inputChangeEvent();//属性设置事件

        //设置画布大小
        reloadCanvasSize();

        //生成画布场景
        generateScene();
        //画布点击事件
        //addStageClickEvent();

        //右键点击事件
        rightMenuEvent();
    
    };
    /**
     * 根据流程信息绘制画布
     * @return {[type]} [description]
     */
    var loadCanvas=function(canvasClassload,processId){
        //创建画布
        canvas = document.getElementById('canvas');
        stage = new JTopo.Stage(canvas);
        scene = new JTopo.Scene(stage);
        //查询流程信息
        $.post(
            ROOT_PATH+'/workflow/workflowDef/queryFlowDefInfo.shtml',
            {
                processId:processId,
            },
            function (defInfo) {
                loadDefInfoToCanvas(defInfo);

            },
            "json");


    };
    /***
     * 将流程信息绘制到画布
     */
    var loadDefInfoToCanvas=function(defInfo){
        var sceneId =defInfo.id;//场景id
        scene.id=sceneId;
        scene.name=sceneId;
        scene.displayName=defInfo.displayName;


        //显示属性列表
        $("#flow_pro_name").text(scene.name);
        $("#flow_pro_displayName").val(scene.displayName);
        $("#flow_pro_business").val(defInfo.businessIdentity);

        inputChangeEvent();//属性设置事件

        //设置画布大小
        reloadCanvasSize();

        //生成画布场景
        generateScene();
        //画布点击事件
        //addStageClickEvent();

        //右键点击事件
        rightMenuEvent();


        //绘制节点
        var nodes=defInfo.nodes;
        for(var i=0;i<nodes.length;i++){
            initCanvasNode(nodes[i]);
        }
        //绘制连接线
       var lines=defInfo.lines;
        for(var i=0;i<lines.length;i++){
            initCanvasNode(lines[i]);
        }

        modifyFlowCode(defInfo.defCode);//刷新源码
    };
    /**
     * 初始化定义信息节点
     * @param {[type]} toolType [description]
     */
    var initCanvasNode=function(nodeData){

        var id=nodeData.id;
        var name=nodeData.name;
        var displayName=nodeData.displayName;
        var x=parseInt(nodeData.x);
        var y=parseInt(nodeData.y);
        var nodeType=nodeData.nodeType;
        if(nodeType==TOOLTYPE_LINE){//连线
            var link = new JTopo.Link(getElementByName(nodeData.fromNodeName),getElementByName(nodeData.toNodeName));
            link.arrowsRadius = 10;
            link.type=nodeType;
            link.nodeData=nodeData;
            scene.add(link);

            link.click( function(e){
                setProperties(TOOLTYPE_LINE,this);//显示节点属性
                return false;
            });
            //setProperties(nodeType,link);
        }else{
            //创建节点
            var node = new JTopo.Node(displayName);
            node.fontColor="0,0,0";
            node.setLocation(x,y);
            node.type=nodeType;
            node.nodeData=nodeData;
            switch(""+nodeType){
                case TOOLTYPE_START:{
                    node.setImage(ROOT_PATH+"/resources/js/workflow/workflowDef/image/canvas_start.png");
                    break;
                }
                case TOOLTYPE_FORMTASK:{
                    node.setImage(ROOT_PATH+"/resources/js/workflow/workflowDef/image/canvas_formTask.png");
                    break;
                }
                case TOOLTYPE_TOOLTASK:{
                    node.setImage(ROOT_PATH+"/resources/js/workflow/workflowDef/image/canvas_toolTask.png");
                    break;
                }
                case TOOLTYPE_SYNCHRONIZER:{
                    node.setImage(ROOT_PATH+"/resources/js/workflow/workflowDef/image/canvas_synchronizer.png");
                    break;
                }
                case TOOLTYPE_END:{
                    node.setImage(ROOT_PATH+"/resources/js/workflow/workflowDef/image/canvas_end.png");
                    break;
                }
            }
            scene.add(node);
            /***
             * 节点点击事件
             */
            node.click( function(e){
                hideRightMenu();//关闭右键菜单
                setProperties(nodeType,this);//显示节点属性
                current_active_node=this;
                if(active_toolbar==TOOLTYPE_LINE){//连线状态
                    makeNodeLine(this);//设置连接线
                }
                return false;
            });
            /***
             * 节点拖拽事件
             */
            node.mousedrag(function(e){
                hideRightMenu();//关闭右键菜单
                this.nodeDragState=true;

            });
            /***
             * 节点鼠标松开事件
             */
            node.mouseup(nodeDragEvent);
            //setProperties(nodeType,node);
        }


        resetToolbarState();//重置工具栏状态

    };

    /***
     * 属性设置事件
     */
    var inputChangeEvent=function(){
        /***
         * 流程名称设置
         */
        $("#flow_pro_displayName").blur(function(){//流程名称改变事件
            var flowProcessId=scene.id;//流程id
            var flowName=scene.name;//流程名称
            var flowDisplayName=$(this).val();//流程名称
            if(flowDisplayName==""){
                alert("流程名称不能为空!");
                //$(this).focus();
                return false;
            }
            //修改流程名称
            updateNodeDisplayName(flowProcessId,TOOLTYPE_FLOW,flowName,flowDisplayName);
        });
        /***
         * 节点名称设置
         */
        $("#flow_pro_node_displayName").blur(function(){//流程名称改变事件
            var flowProcessId=scene.id;//流程id
            var nodeName=current_active_node.nodeData.name;//名称
            var nodeType=current_active_node.nodeData.nodeType;//类型
            var displayName=$(this).val();//显示名称
            if(displayName==""){
                alert("节点名称不能为空!");
                //$(this).focus();
                return false;
            }
            //修改节点名称
            updateNodeDisplayName(flowProcessId,nodeType,nodeName,displayName);
        });
        /***
         * 任务节点名称设置
         */
        $("#flow_pro_formTask_displayName").blur(function(){//流程名称改变事件
            var flowProcessId=scene.id;//流程id
            var nodeName=current_active_node.nodeData.name;//名称
            var nodeType=current_active_node.nodeData.nodeType;//类型
            var displayName=$(this).val();//显示名称
            if(displayName==""){
                alert("节点名称不能为空!");
               // $(this).focus();
                return false;
            }
            //修改节点名称
            updateNodeDisplayName(flowProcessId,nodeType,nodeName,displayName);
        });
        /***
         * 任务编辑表单设置
         */
        $("#flow_pro_formTask_editForm").blur(function(){
            var flowProcessId=scene.id;//流程id
            var nodeName=current_active_node.nodeData.name;//名称
            var nodeType=current_active_node.nodeData.nodeType;//类型
            var editForm=$(this).val();//编辑表单
            //修改节点属性
            updateNodeAttribute(flowProcessId,nodeType,nodeName,'editForm',editForm);
        });
        /***
         * 任务只读表单设置
         */
        $("#flow_pro_formTask_viewForm").blur(function(){
            var flowProcessId=scene.id;//流程id
            var nodeName=current_active_node.nodeData.name;//名称
            var nodeType=current_active_node.nodeData.nodeType;//类型
            var viewForm=$(this).val();//只读表单
            //修改节点属性
            updateNodeAttribute(flowProcessId,nodeType,nodeName,'viewForm',viewForm);
        });
        /***
         * 自动节点名称设置
         */
        $("#flow_pro_toolTask_displayName").blur(function(){//流程名称改变事件
            var flowProcessId=scene.id;//流程id
            var nodeName=current_active_node.nodeData.name;//名称
            var nodeType=current_active_node.nodeData.nodeType;//类型
            var displayName=$(this).val();//显示名称
            if(displayName==""){
                alert("节点名称不能为空!");
                //$(this).focus();
                return false;
            }
            //修改节点名称
            updateNodeDisplayName(flowProcessId,nodeType,nodeName,displayName);
        });
    };
    /***
     * 添加stage点击事件
     */
    var addStageClickEvent=function(){
        stage.addEventListener("click", stageClickEventens);
    };
    /***
     * 移除stage点击事件
     */
    var removeStageClickEvent=function(){
        stage.removeEventListener("click");
    };
    /**
     * 监听画布的点击事件
     * @param  {[type]} e [description]
     * @return {[type]}   [description]
     */
    var stageClickEventens=function(e){
        if(active_toolbar!=""){
            var param={};
            param.x=e.layerX;//鼠标x坐标
            param.y=e.layerY;//鼠标y坐标
            param.nodeType=active_toolbar;//添加节点的类型
            param.processId=scene.id;//流程id
            generateNode(param);//添加画布节点

        }else{
            //setProperties("0",scene);//设置显示流程属性
        }
    };
    /**
     * 重置画布大小，宽高
     * @return {[type]} [description]
     */
    var reloadCanvasSize=function(){
        var canvasWidth=canvas.parentNode.offsetWidth;
        var canvasHeight=canvas.parentNode.offsetHeight;
        canvas.width=canvasWidth;
        canvas.height=canvasHeight;
    };
    /**
     * 生成场景对象
     */
    var generateScene=function(){
        $.post(
            ROOT_PATH+'/workflow/workflowDef/generateWorkflowDef.shtml',
            {
                processId:scene.id,
                nodeType:active_toolbar
            },
            function (workflowDef) {
                modifyFlowCode(workflowDef);
            },
            "json");
    };
    /***
     * 修改源代码展示内容
     */
    var modifyFlowCode=function(flowCode){
        $(".canvas_xml").text(flowCode);
    };

    /**
     * 添加画布节点
     * @param {[type]} toolType [description]
     */
    var addCanvasNode=function(nodeData){

        var id=nodeData.id;
        var name=nodeData.name;
        var displayName=nodeData.displayName;
        var x=parseInt(nodeData.x);
        var y=parseInt(nodeData.y);
        var nodeType=nodeData.nodeType;
        if(active_toolbar==TOOLTYPE_LINE){
            var link = new JTopo.Link(lineNodes[0], lineNodes[1]);
            link.arrowsRadius = 10;
            link.type=nodeType;
            link.nodeData=nodeData;
            scene.add(link);

            link.click( function(e){
                setProperties(TOOLTYPE_LINE,this);//显示节点属性
                return false;
            });
            setProperties(nodeType,link);
        }else{
            //创建节点
            var node = new JTopo.Node(displayName);
            node.fontColor="0,0,0";
            node.setLocation(x,y);
            node.type=nodeType;
            node.nodeData=nodeData;
            switch(active_toolbar){
                case TOOLTYPE_START:{
                    node.setImage(ROOT_PATH+"/resources/js/workflow/workflowDef/image/canvas_start.png");
                    break;
                }
                case TOOLTYPE_FORMTASK:{
                    node.setImage(ROOT_PATH+"/resources/js/workflow/workflowDef/image/canvas_formTask.png");
                    break;
                }
                case TOOLTYPE_TOOLTASK:{
                    node.setImage(ROOT_PATH+"/resources/js/workflow/workflowDef/image/canvas_toolTask.png");
                    break;
                }
                case TOOLTYPE_SYNCHRONIZER:{
                    node.setImage(ROOT_PATH+"/resources/js/workflow/workflowDef/image/canvas_synchronizer.png");
                    break;
                }
                case TOOLTYPE_END:{
                    node.setImage(ROOT_PATH+"/resources/js/workflow/workflowDef/image/canvas_end.png");
                    break;
                }
            }
            scene.add(node);
            /***
             * 节点点击事件
             */
            node.click( function(e){
                hideRightMenu();//关闭右键菜单
                setProperties(nodeType,this);//显示节点属性
                current_active_node=this;
                if(active_toolbar==TOOLTYPE_LINE){//连线状态
                    makeNodeLine(this);//设置连接线
                }
                return false;
            });
            /***
             * 节点拖拽事件
             */
            node.mousedrag(function(e){
                hideRightMenu();//关闭右键菜单
                this.nodeDragState=true;

            });
            /***
             * 节点鼠标松开事件
             */
            node.mouseup(nodeDragEvent);
            setProperties(nodeType,node);
        }


        resetToolbarState();//重置工具栏状态

    };
    /***
     * 创建连接线
     * @param node
     */
    var makeNodeLine=function(node){
        if(lineNodes.length<=0){//无激活的节点
            lineNodes.push(node);//添加连线节点
        }else if(lineNodes.length==1){//存在一个节点
            if(node==lineNodes[0]){
                alert("请选择两个不同的节点!");
                return false;
            }else if(lineNodes[0].nodeData.nodeType!=TOOLTYPE_SYNCHRONIZER&&node.nodeData.nodeType!=TOOLTYPE_SYNCHRONIZER){
                alert("两个节点之间不允许连接!");
                return false;
            }else if(lineNodes[0].nodeData.nodeType==TOOLTYPE_SYNCHRONIZER&&node.nodeData.nodeType==TOOLTYPE_SYNCHRONIZER){
                alert("两个同步器之间不允许连接!");
                return false;
            }else{//连线
                lineNodes.push(node);
                // 生成连线
                var param={};
                param.processId=scene.id;
                param.nodeType=TOOLTYPE_LINE;//添加节点的类型
                param.fromNode=lineNodes[0].nodeData.name;
                param.toNode=node.nodeData.name;
                generateNode(param);

            }
        }
    };
    /***
     * 节点拖拽事件
     * @param e
     */
    var nodeDragEvent=function(e){
        hideRightMenu();//关闭右键菜单
        var selfNode=this;//当前节点对象
        if(event.button == 0&&this.nodeDragState==true){

            console.log("拖拽到");
            this.nodeDragState=false;
            var params={};
            params.processId=scene.id;
            params.nodeName=selfNode.nodeData.name;//当前节点名称
            params.x=selfNode.x;//鼠标x坐标
            params.y=selfNode.y;//鼠标y坐标
            $.post(
                ROOT_PATH+'/workflow/workflowDef/dragNode.shtml',
                params,
                function (nodeData) {
                    if(nodeData.errorMsg!=null&&nodeData.errorMsg!=''){
                        alert(nodeData.errorMsg);
                        return;
                    }
                    selfNode.nodeData.x=nodeData.x;
                    selfNode.nodeData.y=nodeData.y;
                    modifyFlowCode(nodeData.defCode);
                },
                "json"
            );
        }else if(event.button==2){//右键
            $(".node_rightMenu").css({
                top:event.pageY-45,
                left:event.pageX
            }).show();
            current_active_node=selfNode;
        }
    };
    /***
     * 隐藏右键菜单
     */
    var hideRightMenu=function(){
        $(".node_rightMenu").hide();
        current_active_node=null;
    };
    /***
     * 右键菜单点击事件
     */
    var rightMenuEvent=function(){
        $(".node_rightMenu a").click(function(){
            var text=$(this).text();
            if(text=="删除"){
                if(current_active_node!=null){
                    var params={};
                    params.processId=scene.id;
                    params.nodeType=current_active_node.nodeData.nodeType;//节点类型
                    params.nodeName=current_active_node.nodeData.name;//节点名称

                    $.post(
                        ROOT_PATH+'/workflow/workflowDef/deleteNode.shtml',
                        params,
                        function (nodeData) {
                            deleteNode();//删除节点
                            //刷新源码
                            modifyFlowCode(nodeData.defCode);
                            hideRightMenu();//关闭右键
                        },
                        "json"
                    );

                }
            }

        });
    };
    /***
     * 删除节点
     */
    var deleteNode=function(){
        //移除画布上的节点
        scene.remove(current_active_node);
        current_active_node=null;
    };
    /***
     * 清除连线状态的节点
     */
    /*var clearLineNodes=function(){
        lineNodes.splice(0,lineNodes.length);
        alert(lineNodes.length);
    };*/
    /**
     * 初始化节点id
     * @param nodeType
     */
    var generateNode=function(params){

        $.post(
            ROOT_PATH+'/workflow/workflowDef/generateNode.shtml',
            params,
            function (nodeData) {
                if(nodeData.errorMsg!=null&&nodeData.errorMsg!=''){
                    alert(nodeData.errorMsg);
                    resetToolbarState();//重置工具栏状态
                    return;
                }
                addCanvasNode(nodeData);
                modifyFlowCode(nodeData.defCode);

            },
            "json"
        );
    };


    /**
     * 初始化工具栏
     * @param  {[type]} toolbarClass [description]
     * @return {[type]}              [description]
     */
    var initToolbar=function(toolbarClass){
        toolbar_class=toolbarClass;
        var toolbars=document.getElementsByClassName(toolbar_class);
        for (var i = toolbars.length - 1; i >= 0; i--) {
            toolbars[i].addEventListener("click", function(){
                toolbarClickEvents(this);
            }, false);
        }
          
    }
    /**
     * 工具栏点击事件
     * @param  {[type]} bar [description]
     * @return {[type]}     [description]
     */
    var toolbarClickEvents=function(bar){
        var toolbarClass=bar.getAttribute("class");
        var toolType=toolbarClass.substr(toolbarClass.length-1,1);//工具栏类型
        var currentActiveToolbar=active_toolbar;//当前激活的工具栏
        resetToolbarState();//重置工具栏状态
        if(toolType!=currentActiveToolbar){
            activeToolbarState(toolType);//激活工具栏状态
           /* switch(toolType){
                case TOOLTYPE_POINTER:{
                    alert();
                    break;
                }
                case TOOLTYPE_POINTER:{
                    alert();
                    break;
                }
            }*/
        }
        hideRightMenu();//关闭右键菜单
        
    }
    /**
     * 重置工具栏状态
     * @return {[type]} [description]
     */
    var resetToolbarState=function(){
        var toolbars=document.getElementsByClassName(toolbar_class);
        for (var i = toolbars.length - 1; i >= 0; i--) {
            toolbars[i].className=toolbars[i].className.replace('active',' ');
        }
        active_toolbar="";//取消当前激活的工具栏
        lineNodes.splice(0,lineNodes.length);//清空连线状态的节点
        removeStageClickEvent();//删除画布点击事件
        hideRightMenu();//关闭右键菜单
    }
    /**
     * 激活工具栏状态
     * @param  {[type]} toolType [description]
     * @return {[type]}          [description]
     */
    var activeToolbarState=function(toolType){
        active_toolbar=toolType;//记录激活的工具栏
        var toolbars=document.getElementsByClassName(toolbar_class);
        for (var i = toolbars.length - 1; i >= 0; i--) {
            toolbars.className=toolbars[i].className.replace('active',' ');
            var tool_Type=toolbars[i].className.substr(toolbars[i].className.length-1,1);//工具栏类型
            if(tool_Type==toolType){
                toolbars[i].className='active '+toolbars[i].className;
                if(toolType!=TOOLTYPE_LINE){//普通节点
                    addStageClickEvent();//添加画布点击事件
                }else{
                    //连接线的触发

                }

            }
        }
    };
    /***
     * 设置属性栏
     * @param nodeType
     */
    var setProperties=function(nodeType,node){
        $(".pros_nodePro").find("table").hide();
        switch(nodeType+""){

            case TOOLTYPE_START:{
                $("#flow_pro_node_name").text(node.nodeData.name);
                $("#flow_pro_node_displayName").val(node.nodeData.displayName);
                $("#flow_pro_node").show();
                break;
            }
            case TOOLTYPE_FORMTASK:{
                $("#flow_pro_formTask_name").text(node.nodeData.name);
                $("#flow_pro_formTask_displayName").val(node.nodeData.displayName);
                $("#flow_pro_formTask_editForm").val(node.nodeData.editForm);
                $("#flow_pro_formTask_viewForm").val(node.nodeData.viewForm);
                $("#flow_pro_formTask").show();
                break;
            }
            case TOOLTYPE_TOOLTASK:{
                $("#flow_pro_toolTask_name").text(node.nodeData.name);
                $("#flow_pro_toolTask_displayName").val(node.nodeData.displayName);
                $("#flow_pro_toolTask").show();
                break;
            }
            case TOOLTYPE_SYNCHRONIZER:{
                $("#flow_pro_node_name").text(node.nodeData.name);
                $("#flow_pro_node_displayName").val(node.nodeData.displayName);
                $("#flow_pro_node").show();
                break;
            }
            case TOOLTYPE_LINE:{
                $("#flow_pro_line_name").text(node.nodeData.name);
                $("#flow_pro_line_displayName").val(node.nodeData.displayName);
                $("#flow_pro_line").show();
                break;
            }
            case TOOLTYPE_END:{
                $("#flow_pro_node_name").text(node.nodeData.name);
                $("#flow_pro_node_displayName").val(node.nodeData.displayName);
                $("#flow_pro_node").show();
                break;
            }
            default:{

            }
        }
    };
    /*******************************************修改节点名称*********************************************************************/
    /***
     * 修改流程显示名称
     * @param processId 流程id
     * @param nodeType 节点类型
     * @param nodeName 节点名称
     * @param displayName 节点名称
     */
    var updateNodeDisplayName=function(processId,nodeType,nodeName,displayName){
        var params={};
        params.processId=processId;
        params.nodeType=nodeType;
        params.nodeName=nodeName;
        params.displayName=displayName;
        $.post(
            ROOT_PATH+'/workflow/workflowDef/updateNodeDisplayName.shtml',
            params,
            function (nodeData) {
                var nodeType=nodeData.nodeType;
                var nodeDisplayName=nodeData.displayName;
                if(nodeType!="0"){
                    var node=getElementByName(nodeData.name);
                    if(node!=null){
                        node.nodeData.displayName=nodeData.displayName;
                        node.text=nodeData.displayName;
                    }
                }

                //更新源码
                modifyFlowCode(nodeData.defCode);

            },
            "json"
        );
    };
    /***
     * 修改节点属性
     * @param flowProcessId
     * @param nodeType
     * @param nodeName
     */
    var updateNodeAttribute=function(processId,nodeType,nodeName,attributeName,attributeValue){
        var params={};
        params.processId=processId;
        params.nodeType=nodeType;
        params.nodeName=nodeName;
        params.attributeName=attributeName;
        params.attributeValue=attributeValue;
        $.post(
            ROOT_PATH+'/workflow/workflowDef/updateNodeAttribute.shtml',
            params,
            function (nodeData) {
                var nodeType=nodeData.nodeType;
                var node=getElementByName(nodeData.name);
                if(node!=null){
                    node.nodeData=nodeData;
                }

                //更新源码
                modifyFlowCode(nodeData.defCode);

            },
            "json"
        );
    };
    /****
     * 根据节点名称查询节点
     * @param name
     * @returns {*}
     */
    var getElementByName=function(name){
        var nodes=scene.getDisplayedNodes();
        for(var i=0;i<nodes.length;i++){
            var node=nodes[i];
            if(name==node.nodeData.name){
                return node;
            }
        }
        return null;

    };
    /****
     * 保存流程信息
     */
    var saveFlowDef=function(){
        var params={};
        var businessIdentity=$("#flow_pro_business").val();//业务标识
        if(businessIdentity==""){
            alert("请选择业务标识!");
            return;
        }
        params.businessIdentity=businessIdentity;
        params.processId=scene.id;
        $.post(
            ROOT_PATH+'/workflow/workflowDef/saveFlowDef.shtml',
            params,
            function (nodeData) {
                if(nodeData!=null&&nodeData.errorMsg!=null){
                    alert(nodeData.errorMsg);
                    return false;
                }else{
                    alert("保存成功");
                    parent.layer.closeAll(); //先得到当前iframe层的索引
                }

            },
            "json"
        );
    };

    return {
        initCanvas: initCanvas,
        loadCanvas:loadCanvas,
        initToolbar: initToolbar,
        saveFlowDef:saveFlowDef
    };
})();
var formatDateTime = function (date) {
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    m = m < 10 ? ('0' + m) : m;
    var d = date.getDate();
    d = d < 10 ? ('0' + d) : d;
    var h = date.getHours();
    var minute = date.getMinutes();

    minute = minute < 10 ? ('0' + minute) : minute;
    var s=date.getSeconds();
    return y +  m +  d+h+minute+s;
};